<?php

namespace Pinenut\Files;

use \Action as Base;

/**
 * Отдаём ноготок 
 * Если его нет - генерим
 * @author kosh
 *
 */
abstract class ThumbAction extends Base {
	protected static $isPublic = true;
	
	protected $_modelClass;// = '\Files\Files';
	
	static function ignoreParams() {
		return ['_langId'];
	}
	static function pullParams() {
		return ['httpIfNoneMatch', 'httpIfModifiedSince'];
	}
	
	
	protected function run() {
		$this->response->noRender ( true );
		
		// проверяем - доступна
		
		$class = $this->_modelClass;
		$file = $class::find($this->request->id);		
		
		if (!$file) {
			throw new \Exception('Not found', 404);
		}
		
		// ахтунге - файло помещаеццо в память и отдаёцца пользователю...
		// TODO: подключить header('X-Accel-Redirect: ');
		
		$thumb = $file->getThumb($this->request->thumb);
				
		$modified = $thumb->created;
		
		$lifetime = intval((time() - $modified) / 5) + 10;
		
		// проверяем - может запрашиваемый файл и не модифицировался,
		// тогда нужно корректно ответить 304 и ничего не отдавать для экономии трафика

		
		$this->response->header('Etag: ' . $thumb->md5);
		$this->response->header('Last-Modified: ' . date(DATE_ATOM, $modified));
		$this->response->header('Cache-Control: ' . 'private, must-revalidate, max-age='.$lifetime);
		$this->response->header('Expires: ' . date(DATE_ATOM, time() + $lifetime));
		$this->response->header('Pragma: cache');
		
		
		if ($this->request->_httpIfNoneMatch == $thumb->md5
		|| strtotime($this->request->_httpIfModifiedSince) == $modified) {
			$this->response->code(304, 'Not Modified');			
			return;
		}
		
		$this->response->header('Content-Type: ' . $thumb->mimeType);
		echo $thumb->getBytes ();
		
	}
}